1. Field of the Invention
The present invention relates generally to computer input/output subsystems, and more particularly, to changing peripheral component interconnect (PCI) configuration registers on PCI bus based devices.
2. Description of the Related Art
A peripheral component interconnect (PCI) bus can couple various devices with other components of a computer system. For instance, the PCI bus may connect devices, herein referred to as PCI devices, such as video cards or network cards to the processor and memory of the computer system. The PCI bus is a standard in the industry and typically allows "plug and play" such that the PCI device coupled to the PCI bus configures itself without user intervention.
The PCI device typically provides a device identification (ID) and a vendor ID to identify the PCI device and the manufacturer of the device. The vendor ID is typically uniquely assigned to each PCI device manufacturer. This combination of information should identify the capabilities of the device. Accordingly, the software, such as the operating system (OS) and drivers, can exploit the capabilities of the device. Most operating systems (referred to as legacy operating systems) typically use the device ID/ vendor ID field to decide which driver to be loaded for the particular PCI device.
The PCI device also typically includes other information such as subsystem ED and sub-vendor ID. The subsystem ID indicates which system device is being used, and the sub-vendor ID indicates the maker of the board. Examples of the various subsystems which can be identified by the subsystem ID include the small computer system interface (SCSI), and the redundant array of independent drives (RAID) subsystems.
The standard procedure is for the operating system to read the subsystem ID and sub-vendor ID of the PCI device to determine which device driver to load for the PCI device. If there is a match, then the proper device driver is loaded, but if there is no match, then the device ID and vendor ID should be read to determine which device driver to utilize. However, in actual conventional practice, the current operating systems typically skip reading the subsystem ID and sub-vendor ID and look directly to the device ID and vendor ID to determine which driver to load.
A problem can arise when a PCI device includes multiple subsystems which are not alike. For instance, a PCI device may include a SCSI card as well as a more complicated subsystem such as a RAID, single-channel adapter, multi-channel adapter, combination card, or a differential. When an operating system or a driver reads the device ID without reading the subsystem ID, the operating system typically cannot accurately determine which driver is the most optimal driver to load. For example, a SCSI driver can understand both the SCSI card and the RAID card. A RAID driver, however, can only understand the RAID card. A problem arises when both the RAID the SCSI cards need to be accessed but a RAID driver is loaded due to the operating system or device driver not having read the subsystem ID.
What is needed is a system and method for providing a determination of which driver to load when a computer system utilizes an operating system or a device driver which typically reads the device ID without reading the subsystem ID. The present invention addresses such a need.